# =============================================================================
#                  CONFIGURATION FILE FOR QUBES-BUILDER
# =============================================================================
#
# THIS CONFIGURATION FILE IS INDENDED TO ONLY BE USED WITH THE `setup` SCRIPT.
# -----------------------------------------------------------------------------
#
# This configuration file (`templates.conf`) will be linked to by `setup` as
# `builder.conf`.  (ln -s example-configs/templates.conf builder.conf)
#
# To use the `setup` script, just run `setup` in the qubes-builder root
# directory.  A series of dialogs will be presented prompting various
# configuration available and then all build configuration files will
# automatically be generated based on the options selected.
#
# `setup` can be re-run again at any time to change configuration options.
# Previous options selected will be retained to allow quick switching of
# branches, templates to build, etc.
#
# Setup uses the following as markers to indicate where to place configuration
# values:
#     [=setup section start=] - Start inserting on the next line
#     [=setup section end=] - Stop insert mode
#
# Anything between these markers will be replaced, therefore:
#     - do not place any user configurations within these markers, or those
#       configurations will be replaced next time setup is run
#     - do not remove or modify the markers or setup will be unable to function
#
# -----------------------------------------------------------------------------
#            CONFIGURATION FILES INCLUDED WITH THIS CONFIGURATION
# -----------------------------------------------------------------------------
# Other configuration files are also included to offer maximum flexibility.  To
# determine which configuration files are actually being included when using
# this configuration file as a base, use the `about` target:
#   `make about`
#
# The other configuration files included (if they exist which some of them are
# automatically generated by `setup`) are as follows:
# - example-configs/qubes-os-r2.conf: If RELEASE == 2; Default Release 2
#   configuration file
# - example-configs/qubes-os-master.conf: If RELEASE == 3; Default Release 3
#   configuration file
# - override.conf: `setup` will also offer to include `override.conf` if one
#   exists.  More information on `overrides` below.
# - example-configs/extended-rules.conf: Contains extra targets mostly for
#   building templates
#
# -----------------------------------------------------------------------------
#                            ADDITIONAL OVERRIDES
# -----------------------------------------------------------------------------
# Instead of directly modifying this or any other `default` configuration
# file, an override.conf file can be placed in the `qubes-builder` root
# directory.  `setup` will offer to include this file if it exists.
#
# The `override.conf` file can contain overrides to most any configuration
# option such as BRANCH, DEBUG, VERBOSE, etc.
#
# If you create `overrides` that are specific to a release version or custom
# branch you are working on, `setup` will also be able to identify overrides
# specific to the release and or branch.
#
# To create release / branch specific `overrides`, create an override
# configuration file and place it in the `example-configs` directory named
# as follows:
#   1) example-configs/r2-feature_branch-override.conf
#      example-configs/r3-master-override.conf
#
#   2) example-configs/r3-feature_branch-override.conf
#      example-configs/r3-master-override.conf
#
#   3) example-configs/feature_branch-override.conf
#      example-configs/master-override.conf
#
#   4) example-configs/override.conf
#
#   5) override.conf
#
# Option 1 above would offer to include the override configuration file if you
# selected to build for Release 2 and are currently in the `feature_branch`
# branch.
#
# Option 2 is the same as Option 1 except for Release 3.
#
# Option 3 would use the same configuration override for both Release 2 and 3
# if you are currently in the `feature_branch` branch.
#
# If there is no release / branch specific override configuration and
# override.conf exists as in options 4, that will be available to select.
#
# Finally, an override.conf file in the `qubes-builder` root directory
# overrides all the above examples.
#
#
# A few additional notes and caveats on overrides:
#
# - The dialog to choose an override configuration is only presented on the
#   initial run of `setup`.  Once a `builder.conf` file created, there will be
#   no further prompts.  As indicated above, `setup` initially soft links
#   `examples-config/templates.conf` to `builder.conf`.  To overcome
#   this limitation, simply delete the `builder.conf` soft link and then the
#   override prompt will become available again when you re-run `setup`.
#
# - The `setup` script soft links any override configuration within the
#   examples-config directory to overrides.conf.  It will allow any soft linked
#   override to be replaced with a newly selected override option, but will not
#   allow an existing `override.conf` regular file to be overwritten that is
#   in the `qubes-builder` root directory.
#
# -----------------------------------------------------------------------------
# All lines which begins with "#" are treated as comments
# Assignments can be made with VAR_NAME="VALUE"

# [=setup info start=]
# [=setup info stop=]

RELEASE ?= 4.0

# SSH_ACCESS is used by `setup` to determine if ssh access mode was selected and
# will re-write the GIT_BASEURL and GIT_PREFIX variables to use ssh mode.
SSH_ACCESS := 0
GIT_BASEURL ?= https://github.com
GIT_PREFIX ?= QubesOS/qubes-

# Fetch repositories with depth=1
GIT_CLONE_FAST ?= 1

# A Qubes master configuration file will be included based on selected RELEASE
#
# A copy of BUILDER_PLUGINS will be made and restored since the BUILDER_PLUGIN
# variable gets over-written in qubes-os-master.conf.
_ORIGINAL_BUILDER_PLUGINS := $(BUILDER_PLUGINS)
ifeq ($(RELEASE), 2)
  -include example-configs/qubes-os-r2.conf
else ifeq ($(RELEASE), 3)
  -include example-configs/qubes-os-r3.0.conf
else ifeq ($(RELEASE), 3.1)
  -include example-configs/qubes-os-r3.1.conf
else ifeq ($(RELEASE), 3.2)
  -include example-configs/qubes-os-r3.2.conf
else ifeq ($(RELEASE), 4.0)
  -include example-configs/qubes-os-r4.0.conf
else
  -include example-configs/qubes-os-master.conf
endif
BUILDER_PLUGINS := $(_ORIGINAL_BUILDER_PLUGINS) $(BUILDER_PLUGINS)

# [=setup plugins start=]
#
#BUILDER_PLUGINS += builder-rpm
#BUILDER_PLUGINS += builder-debian
#BUILDER_PLUGINS += builder-archlinux
#BUILDER_PLUGINS += template-whonix
#BUILDER_PLUGINS += template-kali
#BUILDER_PLUGINS += mgmt-salt

# [=setup plugins stop=]

# Put all the enabled plugins into components to download them. But avoid
# duplicates
_temp_components := $(COMPONENTS)
COMPONENTS += $(filter-out $(_temp_components), $(BUILDER_PLUGINS))

DEBUG = 0
VERBOSE = 0
NO_SIGN = 1

DIST_DOM0 ?= fc20

# Only build templates (comment out or set to '0' to build all of Qubes).
TEMPLATE_ONLY ?= 0

################################################################################
#             S A L T   M A N A G E M E N T   O P T I O N S
################################################################################
# MGMT_SALT_ONLY - Build only mgmt-salt COMPONENTS
#  Only mgmt-salt components will bw built when issuing 'make qubes[-vm/dom0]
#  which is useful for developing.
#
# Set 1 to enable building only salt-mgmt COMPONENTS or clear value to build
# all qubes components including mgmt-salt.
# Default: novalue
#MGMT_SALT_ONLY = 1

# MGMT_SALT_COMPONENTS_USER - Custom mgmt-salt user components
#   Add any extra user based mgmt-salt formula components to include in build.
# Default: novalue
#MGMT_SALT_COMPONENTS_USER =

################################################################################
#                     L I S T   O F   D I S T   V M ' S
################################################################################
# Available template flavors may be added the the template build by appending
# `+flavor_name`

# [=setup dists start=]
ifneq "$(SETUP_MODE)" "1"
endif
# [=setup dists stop=]

# List of all build template variations that will be offered in the 'setup'
# DISTS_VM dialog to be able to choose from
ifeq "$(SETUP_MODE)" "1"
  DISTS_VM :=
  DISTS_VM += fc29
  DISTS_VM += fc29+minimal
  DISTS_VM += fc29+fullyloaded
  DISTS_VM += fc29+xfce
  DISTS_VM += fc30
  DISTS_VM += fc30+minimal
  DISTS_VM += fc30+fullyloaded
  DISTS_VM += fc30+xfce
  DISTS_VM += fc31+minimal
  DISTS_VM += fc31+fullyloaded
  DISTS_VM += fc31+xfce
  DISTS_VM += centos7
  DISTS_VM += centos7+minimal
  DISTS_VM += centos7+xfce
  DISTS_VM += jessie
  DISTS_VM += jessie+minimal
  DISTS_VM += jessie+gnome
  DISTS_VM += stretch
  DISTS_VM += stretch+minimal
  DISTS_VM += stretch+gnome
  DISTS_VM += buster
  DISTS_VM += buster+minimal
  DISTS_VM += buster+gnome
  DISTS_VM += xenial
  DISTS_VM += xenial+desktop
  DISTS_VM += bionic
  DISTS_VM += bionic+desktop
  DISTS_VM += archlinux
endif

################################################################################
#                     T E M P L A T E   A L I A S
################################################################################
# TEMPLATE_ALIAS can be used to choose a shorter name in DISTS_VM that
# include some other TEMPLATE_FLAVORs.  A TEMPLATE_LABEL will automatically
# be created if one does not exist that will use the alias name as the
# tempalte name.  Plus signs (+) will be converted to hyphens (-).
ifneq (,$(findstring jessie, $(DISTS_VM))$(findstring stretch, $(DISTS_VM)))

  TEMPLATE_ALIAS += jessie:jessie+standard
  TEMPLATE_ALIAS += jessie+gnome:jessie+gnome+standard
  TEMPLATE_ALIAS += jessie+minimal:jessie+minimal+no-recommends

  TEMPLATE_ALIAS += stretch:stretch+standard
  TEMPLATE_ALIAS += stretch+gnome:stretch+gnome+standard
  TEMPLATE_ALIAS += stretch+minimal:stretch+minimal+no-recommends
endif

################################################################################
#                 T E M P L A T E   C O N F I G U R A T I O N
################################################################################
# TEMPLATE_LABEL allows control over the final template name.  There is a limit
# of 31 characters for the final template name
#
# TEMPLATE_LABE += <DIST_VM name as listed above>:<desired final template name>
TEMPLATE_LABEL ?=
TEMPLATE_LABEL += stretch:debian-9
TEMPLATE_LABEL += stretch+standard:debian-9

# Location of templates flavors that are not in default location.
# Example: wheezy+whonix-gateway would normally be in
#          $$$$TEMPLATE_SCRIPTS/wheezy+whonix-gateway
#   -or-   $$$$TEMPLATE_SCRIPTS/wheezy
#          (Don't Place in {curly} brackets; ending curly gets cut off
TEMPLATE_FLAVOR_DIR :=
TEMPLATE_FLAVOR_DIR += +gnome:$$$$TEMPLATE_SCRIPTS/gnome
TEMPLATE_FLAVOR_DIR += +flash:$$$$TEMPLATE_SCRIPTS/flash
TEMPLATE_FLAVOR_DIR += +desktop:$$$$TEMPLATE_SCRIPTS/desktop

################################################################################
#                  T E M P L A T E   C O M P O N E N T S
################################################################################
# Contains a list of components when only building templates.  Note the build
# order is very important
TEMPLATE :=

TEMPLATE += $(BUILDER_PLUGINS)

TEMPLATE += vmm-xen
TEMPLATE += core-vchan-xen
ifneq ($(RELEASE), 2)
  TEMPLATE += core-qubesdb
endif
ifeq (,$(filter $(RELEASE), 3.2 4.0))
  TEMPLATE += core-qrexec
endif
TEMPLATE += linux-utils
TEMPLATE += core-agent-linux
TEMPLATE += gui-common
TEMPLATE += gui-agent-linux
TEMPLATE += app-linux-split-gpg
TEMPLATE += app-thunderbird
TEMPLATE += app-linux-pdf-converter
TEMPLATE += app-linux-img-converter
TEMPLATE += app-linux-input-proxy
TEMPLATE += app-linux-usb-proxy
TEMPLATE += $(MGMT_COMPONENTS)
TEMPLATE += meta-packages
TEMPLATE += linux-template-builder

################################################################################
#            O V E R R I D E   B R A N C H   L O C A T I O N S
################################################################################
# Not yet available in 'QubesOS' repo
GIT_URL_template_whonix = $(GIT_BASEURL)/Whonix/qubes-template-whonix.git
GIT_URL_template_kali = $(GIT_BASEURL)/fepitre/qubes-template-kali.git

################################################################################
#         U S E   Q U B E S   P A C K A G E S   R E P O S I T O R I E S
################################################################################
# For building just few selected packages, it's very useful to download
# pre-built qubes-specific dependencies from `{yum,deb}.qubes-os.org`.
# This is especially true for gcc, which takes several hours to build.

# USE_QUBES_REPO_VERSION = $(RELEASE)
# USE_QUBES_REPO_TESTING = 0

################################################################################
#                        M I S C E L L A N E O U S
################################################################################
# Qubes-builder deps
DEPENDENCIES ?=
DEPENDENCIES += git rpmdevtools rpm-build createrepo perl-Digest-MD5 perl-Digest-SHA

# Additional for debian template
DEPENDENCIES += debootstrap dpkg-dev

# for ./setup
DEPENDENCIES += python3-sh dialog

# Uncomment the the following to enable override.conf include.  Setup will
# automatically enable it only if an override is available and selected by
# user to enable.
#INCLUDE_OVERRIDE_CONF ?= true
ifdef INCLUDE_OVERRIDE_CONF
  -include override.conf
endif

.PHONY: about release
about::
	@echo "templates.conf"

release:
	@echo "$(RELEASE)"

# vim: filetype=make
